package cn.com.anypay.manager.common.validation;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;

/**
 * 密码强度验证注解
 * 验证密码是否符合强度要求
 */
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PasswordStrengthValidator.class)
public @interface PasswordStrength {

    String message() default "密码强度不符合要求";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 最小长度
     */
    int minLength() default 8;

    /**
     * 最大长度
     */
    int maxLength() default 20;

    /**
     * 是否要求包含大写字母
     */
    boolean requireUppercase() default true;

    /**
     * 是否要求包含小写字母
     */
    boolean requireLowercase() default true;

    /**
     * 是否要求包含数字
     */
    boolean requireDigit() default true;

    /**
     * 是否要求包含特殊字符
     */
    boolean requireSpecialChar() default false;

    /**
     * 允许的特殊字符
     */
    String allowedSpecialChars() default "!@#$%^&*()_+-=[]{}|;:,.<>?";

    /**
     * 是否禁止常见弱密码
     */
    boolean forbidCommonPasswords() default true;

    /**
     * 是否禁止连续字符
     */
    boolean forbidSequentialChars() default true;

    /**
     * 最大连续相同字符数
     */
    int maxRepeatingChars() default 2;
}